package Main; import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.JTextPane; /** * * @author Lorand * */ public class GUI extends JFrame { private JFrame Frm; private JMenuBar meniu; private JLabel timpSosireMin, timpSosireMax, timpServireMin, timpServireMax, timp, timpMediu, nrClienti, nrCase; private JTextField tSosireMin, tSosireMax, tServireMin, tServireMax, addTimp, addNrClienti, addNrCase; public static JTextField[] queues; private JButton start, enter; private JLabel addTimpSosireMin, addTimpSosireMax, addTimpServireMin, addTimpServireMax; public static int nrC, nrCl, minSosire, maxSosire, minServire, maxServire; protected Algorithm algorithm; static JTextField incrementTime, afTimpMediu; /** * Constructor */ public GUI() { Frm = new JFrame("Queues - Homework 3"); Frm.setBounds(200, 30, 900, 700); Frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Frm.getContentPane().setLayout(null); meniu = new JMenuBar(); Frm.setJMenuBar(meniu); JMenu file = new JMenu("File"); file.setMnemonic(KeyEvent.VK_F); meniu.add(file); JMenuItem eMenuItem = new JMenuItem("Exit Program"); eMenuItem.setMnemonic(KeyEvent.VK_E); eMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent event) { System.exit(0); } }); // exit timpSosireMin = new JLabel(); timpSosireMin.setText("Arrival Time:"); timpSosireMin.setBounds(40, 20, 100, 20); Frm.getContentPane().add(timpSosireMin); addTimpSosireMin = new JLabel(); addTimpSosireMin.setText("Minimum:"); addTimpSosireMin.setBounds(150, 40, 100, 20); Frm.getContentPane().add(addTimpSosireMin); tSosireMin = new JTextField(); tSosireMin.setBounds(250, 40, 40, 30); Frm.getContentPane().add(tSosireMin); timpSosireMax = new JLabel(); timpSosireMax.setText("Arrival time:"); timpSosireMax.setBounds(40, 20, 100, 20); Frm.getContentPane().add(timpSosireMax); addTimpSosireMax = new JLabel(); addTimpSosireMax.setText("Maximum:"); addTimpSosireMax.setBounds(150, 70, 100, 20); Frm.getContentPane().add(addTimpSosireMax); tSosireMax = new JTextField(); tSosireMax.setBounds(250, 70, 40, 30); Frm.getContentPane().add(tSosireMax); timpServireMin = new JLabel(); timpServireMin.setText("Service Time:"); timpServireMin.setBounds(350, 20, 100, 20); Frm.getContentPane().add(timpServireMin); addTimpServireMin = new JLabel(); addTimpServireMin.setText("Minimum:"); addTimpServireMin.setBounds(460, 40, 100, 20); Frm.getContentPane().add(addTimpServireMin); tServireMin = new JTextField(); tServireMin.setBounds(540, 40, 40, 30); Frm.getContentPane().add(tServireMin); timpServireMax = new JLabel(); timpServireMax.setText("Service Time:"); timpServireMax.setBounds(350, 20, 100, 20); Frm.getContentPane().add(timpServireMax); addTimpServireMax = new JLabel(); addTimpServireMax.setText("Maximum:"); addTimpServireMax.setBounds(460, 70, 100, 20); Frm.getContentPane().add(addTimpServireMax); tServireMax = new JTextField(); tServireMax.setBounds(540, 70, 40, 30); Frm.getContentPane().add(tServireMax); timp = new JLabel(); timp.setText("Time:"); timp.setBounds(40, 150, 100, 20); Frm.getContentPane().add(timp); incrementTime = new JTextField(); incrementTime.setBounds(110, 150, 70, 30); incrementTime.setEditable(false); Frm.getContentPane().add(incrementTime); timpMediu = new JLabel(); timpMediu.setText("Average waiting time:"); timpMediu.setBounds(200, 150, 150, 20); Frm.getContentPane().add(timpMediu); afTimpMediu = new JTextField(); afTimpMediu.setBounds(370, 150, 70, 30); afTimpMediu.setEditable(false); Frm.getContentPane().add(afTimpMediu); nrClienti = new JLabel(); nrClienti.setText("Customers:"); nrClienti.setBounds(40, 190, 100, 20); Frm.getContentPane().add(nrClienti); addNrClienti = new JTextField(); addNrClienti.setBounds(110, 190, 70, 30); Frm.getContentPane().add(addNrClienti); nrCase = new JLabel(); nrCase.setText("NrCase:"); nrCase.setBounds(295, 190, 100, 20); Frm.getContentPane().add(nrCase); addNrCase = new JTextField(); addNrCase.setBounds(370, 190, 70, 30); Frm.getContentPane().add(addNrCase); start = new JButton("Start"); start.setBounds(710, 200, 70, 30); Frm.getContentPane().add(start); enter = new JButton("Save data"); enter.setBounds(550, 200, 150, 30); Frm.getContentPane().add(enter); file.add(eMenuItem); enter.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (e.getSource() == enter) { nrC = Integer.parseInt(addNrCase.getText()); if (nrC <= 6) { queues = new JTextField[nrC]; for (int i = 0; i <= nrC - 1; i++) { queues[i] = new JTextField(); queues[i].setText(" "); queues[i].setBounds(110, 260 + 60 * i, 500, 50); queues[i].setVisible(true); Frm.getContentPane().add(queues[i]); } } else JOptionPane.showMessageDialog(null, "Numarul maxim de case de care dispune magazinul este 6"); } } }); start.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (e.getSource() == start) { minSosire = Integer.parseInt(tSosireMin.getText()); maxSosire = Integer.parseInt(tSosireMax.getText()); minServire = Integer.parseInt(tServireMin.getText()); maxServire = Integer.parseInt(tServireMax.getText()); nrC = Integer.parseInt(addNrCase.getText()); nrCl = Integer.parseInt(addNrClienti.getText()); ArrayList<Client> clnt = new ArrayList<Client>(); int timpSosire, timpServire; System.out.printf( "Offices: %d \t Customers: %d \nMin arrival: %d \t Max arrival: %d \nMin service: %d \t Max service: %d \n", nrC, nrCl, minSosire, maxSosire, minServire, maxServire); for (int i = 0; i <= nrCl - 1; i++) { timpSosire = randomSpace(minSosire, maxSosire); timpServire = randomSpace(minServire, maxServire); Client cl = new Client(timpSosire, timpServire); clnt.add(cl); } algorithm = new Algorithm(nrCl, nrC); Thread th = new Thread(algorithm); th.start(); } } }); Frm.setVisible(true); } /** * * @param x * @param y * @return */ private int randomSpace(int x, int y) { Random randomm = new Random(); int a; /* * while(a<x || a>y) a=randomm.nextInt(100000); */ do { a = randomm.nextInt(1000000); } while ((a < x) || (a > y)); return a; } }